﻿///  NO1

///此方法用于的字段的验证分为：（第一：只能对具有val的属性进行验证， 第二： 在每个字段后面追加一个span元素）

//  必填验证                  eg: { eq:"默认字段", s:"",e:"必填字段",showSuccess:true/false}  =>showSuccess:为字段做Ajax验证提供不显示正确信息。

//  输入长度验证              eg: { min:1,max:20,s:"",e:"",showSuccess:true/false }

//  正则验证                  eg: { match: /^\d{6}$/ , s:"",e:"",showSuccess:true/false }

function ValidationInput(body, required, length, regular) {

    //input添加Message的span,省去了自己追加input的尴尬
    if (body.next().attr("name") != "message")
        body.after("<span name='message'></span>");


    //获取当前控件的值
    var input = $.trim(body.val());

    //判断前端是否有“必填“验证
    if (required != undefined) {

        //用户也可以不输入，则默认值为""
        if (required.eq == undefined)
            required.eq = "";

        //如果输入字段等于默认字段，则返回错误信息
        if (input == required.eq) {

            //在后面的元素里面追加错误信息
            body.next().empty().append("<span class='tip_err'>" + required.e + "</span>");

            //信息追加，返回false
            return false;
        }

        //判断后续没有了“长度验证”和“正则验证”,则可以输入正确信息
        if ((length == undefined) && (regular == undefined)) {
            if (required.showSuccess)
                body.next().empty().append("<span class='tip_right'>" + required.s + "</span>");
            return true;
        }
    }

    //判断前端是否设置了“长度”验证（支持一个“汉字”等于二个字符）
    if (length != undefined) {

        //如果为空，则说明要么不填写，填写就要输入正确的长度
        if (input == "")
            return true;

        //“汉字”为两个字符的验证判断
        var len = 0;
        for (var i = 0; i < input.length; i++) {
            if (input.charCodeAt(i) > 255 || input.charCodeAt(i) < 0) {
                len += 2;
            }
            else {
                len++;
            }
        }

        //如果“输入长度”在我的范围之外，需要提示错误信息
        if (len < length.min || len > length.max) {
            body.next().empty().append("<span class='tip_err'>" + length.e + "</span>");
            return false;
        } else {
            //判断是否展示正确信息（如果加了“正则”匹配，则说明是否regualer的优先级高于length）
            if (length.showSuccess) {
                body.next().empty().append("<span class='tip_right'>" + length.s + "</span>");
            }
        }
    }

    //判断前端是否设置了”正则“验证
    if (regular != undefined) {
        //如果input为空，则说明要么不填写，填写就填写正确的
        if (input == "")
            return true;
        //对输入信息进行正则验证
        if (!regular.match.test(input)) {
            body.next().empty().append("<span class='tip_err'>" + regular.e + "</span>");
            return false;
        } else {
            //判断是否展示正确信息
            if (regular.showSuccess) {
                body.next().empty().append("<span class='tip_right'>" + regular.s + "</span>");
            }
        }
    }

    return true;
}

///NO2

///此方法用于清空当前的错误信息  (此方法之针对ValidationInput方法生效)
function ClearErrorMessage(body) {
    body.next("span[name='message']").empty();
}

///NO3

///错误信息的追加方法

///body: 追加的对象

///isSuccess: 是否成功

///message.e:  错误信息， message.s: 正确信息

function AppendText(body, isSuccess, message) {
    if (isSuccess) {
        body.next().empty().append("<span class='tip_right'>" + message.s + "</span>");
    } else {
        body.next().empty().append("<span class='tip_err'>" + message.e + "</span>");
    }
    return isSuccess;
}

///NO4

///提交表单之前的验证。

///validationCollention: [{"id的key","id的value"},{"id的key","id的value"}]

///两个依据  一：文本框是否还是默认值 

///          二：是否有错误信息出现

///          三：元素触发类型
function SubmitForm(validationCollention, isredirect, triggerlist) {

    //默认值
    var isSuccess = true;

    //第一层遍历看有几个input
    $.each(validationCollention, function (key, value) {
        //第二层遍历比较value，如果value值相同则失败
        $.each(value, function (k, v) {

            var validation = $("#" + k);

            var hasError = validation.next().children().hasClass("tip_err");

            //判断是否是默认值，还是被编辑过的
            if ((validation.val() == v) || hasError) {

                isSuccess = false;

                if (triggerlist == undefined) {
                    validation.blur();
                } else {
                    if (triggerlist[key] == "blur")
                        validation.blur();
                    if (triggerlist[key] == "change")
                        validation.change();
                }

                //判断是否平滑跳转
                if (isredirect) {
                    //第一种是滑动效果
                    //                    $("html,body").animate({ scrollTop: $(validation).offset().top }, 500);
                    //第二种是锚链接效果
                    //                    var anchor = "#" + k;
                    //                    $(validation).next().append("<a name=" + anchor + "></a>");
                    //                    window.location = anchor;
                }
            }
        });
        return isSuccess;
    });
    return isSuccess;
}

///NO5

/// 时间比较函数：

///  长时间比较

//时间比较函数(yyyy-MM-dd HH:mm:ss)
function CompareTime(startDate, endDate, startTime, endTime) {
    var startDate = startDate.replace(/-/g, '/') + " " + startTime;
    var endDate = endDate.replace(/-/g, '/') + " " + endTime;

    //如果开始时间大于结束时间
    if (new Date(startDate) > new Date(endDate)) {
        return false;
    }
    return true;
}

///NO6

///日期比较函数

///短日期比较(yyyy-MM-dd)
function CompareDate(startDate, endDate) {
    var startDate = startDate.replace(/-/g, '/');
    var endDate = endDate.replace(/-/g, '/');

    //如果开始时间大于结束时间
    if (new Date(startDate) > new Date(endDate)) {
        return false;
    }
    return true;
}

///NO7  比较两数字
function CompareNum(minNum, maxNum) {
    var min = parseInt(minNum);
    var max = parseInt(maxNum);

    if (min > max)
        return false;
    return true;
}

//NO8  比较两个数组 (True:相等  False:不相等, 场景：用于判断页面是否编辑过，及时给出用户提示）
function CompareArray(orginArray, targetArray) {
    var count = 0;
    for (var i = 0; i < orginArray; i++) {
        if (orginArray[i] != targetArray[i]) {
            count = count + 1;
            return false;
        }
    }
    return true;
}

//NO9   比较密码
function ComparePassword(origin, target, message) {
    //如果目标控件有值，就要比较是否相同，否则不需要比较
    if (target != undefined && target.val() != "") {
        if (AppendText(origin, $.trim(origin.val()) == $.trim(target.val()), message)) {
            AppendText(target, true, message)
        }
    }
    return true;
}

//NO10  定向到指定的锚点
function ToAnimate(target) {
    $("html,body").animate({ scrollTop: target.offset().top }, 500);
}

//N011 获取文本的长度（区分“字符”和“数字”）
function GetLength(input) {
    var len = 0;
    for (var i = 0; i < input.length; i++) {
        if (input.charCodeAt(i) > 255 || input.charCodeAt(i) < 0) {
            len += 2;
        }
        else {
            len++;
        }
    }
    return len;
}

//NO12 截取字符串
function CutString(input, hopeLen) {

    if (input == undefined)
        return "";

    //区别中英文的字符总结的长度
    var len = 0;

    //不区分中英文字符总结的长度
    var actualLen = 0;

    var shortInput = "";

    if (hopeLen == undefined)
        hopeLen = 20; //20个字符，10个汉字

    for (var i = 0; i < input.length; i++) {

        if (len > hopeLen) {
            var shortInput = input.substring(0, actualLen);
            return "<span title='" + input + "'>" + shortInput + "...</span>";
        }

        if (input.charCodeAt(i) > 255 || input.charCodeAt(i) < 0) {
            len += 2;
        }
        else {
            len++;
        }

        actualLen++;
    }
    return "<span title='" + input + "'>" + input + "</span>";
}

//NO13: //JS来获取本地时间
function Time() {

    var Timer = new Date()
    var years = Timer.getYear() + 1900
    var month = Timer.getMonth() + 1
    var day = Timer.getDate()
    var hours = Timer.getHours()
    var minutes = Timer.getMinutes()
    var seconds = Timer.getSeconds()

    if (hours == 0)
        hours = 12;
    if (minutes <= 9)
        minutes = "0" + minutes;
    if (seconds <= 9)
        seconds = "0" + seconds;

    //change font size here to your desire 
    myclock = years + "-" + month + "-" + day + " " + hours + ":" + minutes;

    return myclock;
} 
